"""
2021-12-10 李竑，广州，暨南大学经济学院

- 股票全息日线数据更新，数据拼接

从邢不行官网下载最近七天的股票数据
"""

import pandas as pd
import os
pd.set_option('expand_frame_repr', False)  # 当列太多时不换行
pd.set_option('display.max_rows', 5000)  # 最多显示数据的行数

# ===读取所有股票代码的列表
def get_stock_code_list_in_one_dir(path):
    """
    从指定文件夹下，导入所有csv文件的文件名
    :param path:
    :return:
    """
    stock_list = []

    # 系统自带函数os.walk，用于遍历文件夹中的所有文件
    for root, dirs, files in os.walk(path):
        if files:  # 当files不为空的时候
            for f in files:
                if f.endswith('.csv'):
                    stock_list.append(f[:8])

    return sorted(stock_list)
path = r'D:/python/xbx_stock_2021_part3/市值选谷策略深度优化实盘/data/daily_data/xbx增量日线'  # 新下载的7天数据
stock_code_list = get_stock_code_list_in_one_dir(path)
print(len(stock_code_list))
# 循环读取股票数据
all_data = pd.DataFrame()  # 用于存储数据
for code in stock_code_list:
    print(code)
    # =读入股票数据
    df = pd.read_csv(path + '/%s.csv' % code, encoding='gbk', skiprows=1)
    all_data = all_data.append(df, ignore_index=True)
all_data.reset_index(inplace=True, drop=True)
for i in all_data.index:
    t = all_data.iloc[i:i+1, :]  # 拆分每一行
    code = t.iloc[0]['股票代码']
    # 构建存储文件路径，原始的全息数据
    path = r'D:/python/xbx_stock_2021_part3/市值选谷策略深度优化实盘/data/daily_data/stock/' \
           + code + '.csv'
    # 文件存在，不是新股
    if os.path.exists(path):
        csv_data = pd.read_csv(path, skiprows=1, encoding='gbk')
        if t.iloc[0]['交易日期'] in csv_data['交易日期'].values:
               print('当前日期 %s 的数据已写入过，无须重复写入！' % t.iloc[0]['股票名称'])
              # 判断当日数据是否已在csv中，不在则在结尾追加写入
        else:
            t.to_csv(path, header=None, index=False, mode='a', encoding='gbk')
            print('追加写入%s.csv成功！' % code)
                    # 文件不存在，说明是新股
    else:
        print('文件%s.csv不存在，正在创建' % code)
        try:
            # 先将头文件输出
            pd.DataFrame(columns=['数据由###整理']).to_csv(path, index=False, encoding='gbk')
            # 新建csv并存储
            t.to_csv(path, index=False, mode='a', encoding='gbk')
            print('文件%s.csv创建成功' % code)
        except Exception as e:
            print(e)  # 把exception输出出来






